/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package LogicaNegocio.Controlador;

import AccesoDatos.Persistencia.Manager.ManagerArea;
import AccesoDatos.Persistencia.Manager.ManagerInformes;
import GUI.Bibliotecario.AdminAreas.PanelActualizarArea;
import LogicaNegocio.Biblioteca.Area;
import LogicaNegocio.Validacion.VBiblioteca;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 * Esta clase en java permite el control de eventos
 * para actualizacion de areas de conocimiento en el sistema.
 *
 * @author sebaxtian
 * Archivo: ControlActualizarArea.java
 * @version 1.0
 * Fecha: mar may 11 04:52:35 COT 2010
 */



public class ControlActualizarArea {

    //Atributos de clase
    private PanelActualizarArea panelActualizarArea;
    private ManagerArea gestorArea;
    private ManagerInformes gestorInformes;
    private Area areaConocimiento;
    private boolean mostrada;

    
    public ControlActualizarArea(PanelActualizarArea panelActualizarArea) {
        this.panelActualizarArea = panelActualizarArea;
        gestorArea = new ManagerArea();
        gestorInformes = new ManagerInformes();
        mostrada = false;
    }

    public void actualizar() {
        if(mostrada){
            try {
                areaConocimiento = new Area();
                int codigoArea = Integer.parseInt(panelActualizarArea.textFieldCodigo.getText());
                int codigoAreaPadre = obtenerCodigoAreaPadre();
                areaConocimiento.setCodigoArea(codigoArea);
                areaConocimiento.setCodigoAreaPadre(codigoAreaPadre);
                areaConocimiento.setDescripcion(panelActualizarArea.textAreaDescripcionNueva.getText());
                areaConocimiento.setNombre(panelActualizarArea.textFieldNombreNuevo.getText());
                new VBiblioteca(areaConocimiento);
                gestorArea.actualizarArea(codigoArea, areaConocimiento);
                limpiar();
                JOptionPane.showMessageDialog(panelActualizarArea, "El area de conocimiento ha sido actualizada con exito", "Actualizar", JOptionPane.PLAIN_MESSAGE);
            } catch(NumberFormatException ex) {
                JOptionPane.showMessageDialog(panelActualizarArea, "El codigo de area solo permite caracteres numericos", "Error Codigo", JOptionPane.ERROR_MESSAGE);
            } catch (VBiblioteca ex) {
                JOptionPane.showMessageDialog(panelActualizarArea, ex.getMessage(), "Error Datos", JOptionPane.INFORMATION_MESSAGE);
            }
        }
    }

    public void mostrarDatosArea() {
        Area area;
        int codigoArea = -1;
        int fila = panelActualizarArea.tablaAreaPadre.getSelectedRow();
        if(fila != -1){
            codigoArea = Integer.parseInt(panelActualizarArea.tablaAreaPadre.getValueAt(fila, 0).toString());
            area = gestorArea.obtenerArea(codigoArea);
            panelActualizarArea.textAreaDescripcion.setText(area.getDescripcion());
            panelActualizarArea.textAreaDescripcionNueva.setText(area.getDescripcion());
            panelActualizarArea.textFieldCodigo.setText(area.getCodigoArea()+"");
            panelActualizarArea.textFieldCodigoAreaPadre.setText(area.getCodigoAreaPadre()+"");
            panelActualizarArea.textFieldCodigoNuevo.setText(area.getCodigoArea()+"");
            panelActualizarArea.textFieldNombre.setText(area.getNombre());
            panelActualizarArea.textFieldNombreNuevo.setText(area.getNombre());
            mostrada = true;
        }
    }

    private void limpiar() {
        panelActualizarArea.textAreaDescripcion.setText("");
        panelActualizarArea.textAreaDescripcionNueva.setText("");
        panelActualizarArea.textFieldCodigo.setText("");
        panelActualizarArea.textFieldCodigoAreaPadre.setText("");
        panelActualizarArea.textFieldCodigoNuevo.setText("");
        panelActualizarArea.textFieldNombre.setText("");
        panelActualizarArea.textFieldNombreNuevo.setText("");
        mostrada = false;
    }

    private int obtenerCodigoAreaPadre() {
        int codigoArea = Integer.parseInt(panelActualizarArea.textFieldCodigoAreaPadre.getText());
        int fila = panelActualizarArea.tablaAreaPadreNuevo.getSelectedRow();
        if(fila != -1){
            codigoArea = Integer.parseInt(panelActualizarArea.tablaAreaPadreNuevo.getValueAt(fila, 0).toString());
        }
        return codigoArea;
    }

    public void actualizarTablaAreasBuscar() {
        List<Area> listaAreas = new ArrayList<Area>();
        listaAreas = gestorInformes.obtenerListaAreas();
        Area area;
        for(int i = 0; i < listaAreas.size(); i++){
            if(panelActualizarArea.tablaAreaPadre.getRowCount() <= i){
                DefaultTableModel tmp = (DefaultTableModel)panelActualizarArea.tablaAreaPadre.getModel();
                Object fila[] = {"",""};
                tmp.addRow(fila);
            }
            area = listaAreas.get(i);
            panelActualizarArea.tablaAreaPadre.setValueAt(area.getCodigoArea(), i, 0);
            panelActualizarArea.tablaAreaPadre.setValueAt(area.getNombre(), i, 1);
        }
    }

    public void actualizarTablaAreas() {
        List<Area> listaAreas = new ArrayList<Area>();
        listaAreas = gestorInformes.obtenerListaAreas();
        Area area;
        for(int i = 0; i < listaAreas.size(); i++){
            if(panelActualizarArea.tablaAreaPadreNuevo.getRowCount() <= i){
                DefaultTableModel tmp = (DefaultTableModel)panelActualizarArea.tablaAreaPadreNuevo.getModel();
                Object fila[] = {"",""};
                tmp.addRow(fila);
            }
            area = listaAreas.get(i);
            panelActualizarArea.tablaAreaPadreNuevo.setValueAt(area.getCodigoArea(), i, 0);
            panelActualizarArea.tablaAreaPadreNuevo.setValueAt(area.getNombre(), i, 1);
        }
    }
}
